/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package camada.bancodedados.daoimplemente.orcamento;

import camada.bancodedados.conexao.Conexao;
import camada.bancodedados.daoimplemente.FormaPagamentoDAOImpl;
import camada.negocio.dao.orcamento.PagamentoDAO;
import eloma.classe.Pagamento;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import utilitarios.Exceptions;

/**
 *
 * @author icaro.klinger
 */
public class PagamentoDAOImpl implements PagamentoDAO {

    Exceptions exceptions = new Exceptions();
    FormaPagamentoDAOImpl daoFormaPagamento = new FormaPagamentoDAOImpl();

    @Override
    public int inserirPagamento(Pagamento pagto) {
        int id = 0;
        PreparedStatement pstm = null;
        try {
            final String SQL_INSERT
                    = "insert into Pagamento(idFormaPagamento, valorTotalProduto, valorNotaFiscal, valorTotal) values (?,?,?,?) ";
            pstm = Conexao.getCon().prepareStatement(SQL_INSERT);
            pstm.setInt(1, pagto.getFormaPagamento().getIdFormaPagamento());
            pstm.setDouble(2, pagto.getValorTotalProduto());
            pstm.setDouble(3, pagto.getValorNotaFiscal());
            pstm.setDouble(4, pagto.getValorTotal());
            pstm.executeUpdate();

            String query = "select idPagamento from Pagamento";
            ResultSet rs = pstm.executeQuery(query);

            while (rs.next()) {
                id = rs.getInt("idPagamento");
            }

        } catch (SQLException e) {
            exceptions.Exceptions(e.getMessage(), "PagamentoDAOImpl-inserirPagamento");
            return 0;
        }

        return id;
    }

    @Override
    public Pagamento pesquisaPagamentoPorIdentificador(int idPagamento) throws Exception {
        PreparedStatement stmt = null;
        ResultSet rs = null;
        try {
            final String SQL_PESQUISA_USUARIO = "select * from Pagamento where idPagamento = ?";
            stmt = Conexao.getCon().prepareStatement(SQL_PESQUISA_USUARIO);
            stmt.setInt(1, idPagamento);
            rs = stmt.executeQuery();
            return carregarResultadoSimples(rs);
        } catch (SQLException sqle) {
            exceptions.Exceptions(sqle.getMessage(), "PagamentoDAOImpl-pesquisaPagamentoPorIdentificador");
            throw new Exception(sqle);
        } catch (Exception e) {
            exceptions.Exceptions(e.getMessage(), "PagamentoDAOImpl-pesquisaPagamentoPorIdentificador");
            throw new Exception(e);
        } finally {
        }
    }

    public List<Pagamento> carregarMultiplosResultados(ResultSet rs) throws SQLException {
        List<Pagamento> resultList = new ArrayList<Pagamento>();
        while (rs.next()) {
            Pagamento dto = new Pagamento();
            carregarVO(dto, rs);
            resultList.add(dto);
        }
        return resultList;
    }

    private Pagamento carregarResultadoSimples(ResultSet rs) throws SQLException {
        if (rs.next()) {
            Pagamento dto = new Pagamento();
            carregarVO(dto, rs);
            return dto;
        } else {
            return null;
        }
    }

    private void carregarVO(Pagamento dto, ResultSet rs) throws SQLException {
        dto.setIdPagamento(rs.getInt("idPagamento"));
        dto.setValorNotaFiscal(rs.getDouble("valorNotaFiscal"));
        dto.setValorTotalProduto(rs.getDouble("valorTotalProduto"));
        dto.setValorTotal(rs.getDouble("valorTotal"));
    }

}
